export function debounce(func, time = 500) {
    let timeId;
    return function (){
        clearTimeout(timeId);
        timeId = setTimeout(() => {
            func();
        }, time);
    }
}
export function setSessionStorageValues(key, value) {
    // 判断 Value 是否为对象，如果不是对象则尝试转换为对象
    if (typeof value !== 'object' || value === null) {
        try {
            value = JSON.parse(JSON.stringify(value));
            // 转换为简单对象（可能会丢失原生对象的一些属性和方法）
        } catch (error) {
            console.error('无法将非对象值转换为对象:', error); return;
        }
    }
    // 将转换后的值（无论是否为对象，现在都是可序列化的）存储到 Session Storage
    sessionStorage.setItem(key, JSON.stringify(value));
}


/**
 *
 * 返回 Session Storage 中指定 key 的值
 * @param key
 * @returns {null|string|number|boolean|object|array}
 */
export function getSessionStorageValues(key) {
    if (!key || typeof key !== 'string') {
        return null;
    }
    const keys = key.split('.');
    let value = sessionStorage.getItem(keys[0]);

    for (let i = 1; i < keys.length; i++) {
        if (value === null) {
            break;
        }
        value = JSON.parse(value)[keys[i]];
    }

    return (typeof value === null || value === undefined) ? null : value;
}

export function hasSessionStorageValues(key){
    return getSessionStorageValues(key) !== null;
}

export function removeSessionStorageValues(key) {
    if (!key || typeof key !== 'string') {
        return;
    }
    const keys = key.split('.');
    if(keys.length === 1){
        sessionStorage.removeItem(key);
        return ;
    }
    const lastKey = keys.pop();
    let value = getSessionStorageValues(keys[0]);

    for (let i = 1; i < keys.length; i++) {
        if (value === null) {
            break;
        }
        value = JSON.parse(value)[keys[i]];
    }

    if (value && typeof value === 'object') {
        delete value[lastKey];
        setSessionStorageValues(keys[0], value);
    }
}